package main

import "fmt"

/*
从上到下打印出二叉树的每个节点，同一层的节点按照从左到右的顺序打印。
例如:
给定二叉树: [3,9,20,null,null,15,7],
    3
   / \
  9  20
    /  \
   15   7
返回：
[3,9,20,15,7]
来源：力扣（LeetCode）
链接：https://leetcode-cn.com/problems/cong-shang-dao-xia-da-yin-er-cha-shu-lcof
著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
*/
func main() {
	root := NewNode(5,nil,nil)
	root.Left = NewNode(2,nil,nil)
	root.Left.Right = NewNode(3,nil,nil)
	root.Left.Left = NewNode(4,nil,nil)
	root.Left.Left.Left =NewNode(1,nil,nil)

	res := levelOrder(root)
	fmt.Println(res)

}

func levelOrder(root *TreeNode) []int {
	list := []int{}
	Print(root,&list)
	return list
}

type TreeNode struct {
	Right *TreeNode
	Left *TreeNode
	Val int
}

type Tree struct {
	root *TreeNode
}

func NewNode(data int, right *TreeNode, left *TreeNode) *TreeNode {
	return &TreeNode{
		Right: right,
		Left:  left,
		Val:  data,
	}
}


func Print(node *TreeNode,list  *[]int)  {

	if node == nil{
		return
	}
	*list = append(*list, node.Val)
	Print(node.Left,list)
	Print(node.Right,list)

}

//type Queue struct {
//	size int
//	slices []*TreeNode
//}
//
//func NewQueue() *Queue {
//	return &Queue{
//	}
//}
//
//func (this *Queue)Add(node *TreeNode)  {
//	if this == nil{
//		return
//	}
//	if node == nil{
//		return
//	}
//	this.slices = append(this.slices, node)
//	this.size ++
//}
//
//func (this *Queue)Pop()  *TreeNode {
//	if this == nil{
//		return nil
//	}
//	if len(this.slices) == 0{
//		return nil
//	}
//	node := this.slices[0]
//	this.slices = this.slices[1:]
//	this.size --
//	return node
//}
//
//
